package com.example.myapplication.utils

import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.util.Log

object AppLauncherUtil {

    private const val TAG = "AppLauncherUtil"

    /**
     * 打开目标应用
     * @param context 上下文
     * @param packageName 目标应用包名
     * @param scheme 兜底使用的 scheme（可为空）
     * @return 是否成功启动
     */
    fun openApp(context: Context, packageName: String, scheme: String? = null): Boolean {
        return try {
            // 1. 优先尝试通过包名获取启动 Intent
            val pm: PackageManager = context.packageManager
            var intent: Intent? = pm.getLaunchIntentForPackage(packageName)

            if (intent != null) {
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                context.startActivity(intent)
                Log.d(TAG, "成功通过包名启动：$packageName")
                return true
            }

            // 2. 如果包名方式失败，尝试使用 scheme
            if (!scheme.isNullOrBlank()) {
                intent = Intent(Intent.ACTION_VIEW, Uri.parse(scheme))
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                context.startActivity(intent)
                Log.d(TAG, "成功通过 scheme 启动：$scheme")
                return true
            }

            Log.w(TAG, "无法启动应用：$packageName")
            false
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }
}
